home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / v cisle / sadanastroju / lightning-0.8-tb-win.xpi / components / calWcapCalendarModule.js < prev    next >
Text File  |  2008-01-16  |  9KB  |  213 lines

  1. /* -*- Mode: javascript; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is Sun Microsystems code.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Sun Microsystems, Inc.
  19.  * Portions created by the Initial Developer are Copyright (C) 2007
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *   Daniel Boelzle <daniel.boelzle@sun.com>
  24.  *   Philipp Kewisch <mozilla@kewis.ch>
  25.  *
  26.  * Alternatively, the contents of this file may be used under the terms of
  27.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  28.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  29.  * in which case the provisions of the GPL or the LGPL are applicable instead
  30.  * of those above. If you wish to allow use of your version of this file only
  31.  * under the terms of either the GPL or the LGPL, and not to allow others to
  32.  * use your version of this file under the terms of the MPL, indicate your
  33.  * decision by deleting the provisions above and replace them with the notice
  34.  * and other provisions required by the GPL or the LGPL. If you do not delete
  35.  * the provisions above, a recipient may use your version of this file under
  36.  * the terms of any one of the MPL, the GPL or the LGPL.
  37.  *
  38.  * ***** END LICENSE BLOCK ***** */
  39.  
  40. //
  41. // init code for globals, prefs:
  42. //
  43.  
  44. // constants:
  45. const NS_OK = Components.results.NS_OK;
  46. const nsIException = Components.interfaces.nsIException;
  47. const nsISupports = Components.interfaces.nsISupports;
  48. const calIWcapSession = Components.interfaces.calIWcapSession;
  49. const calIWcapCalendar = Components.interfaces.calIWcapCalendar;
  50. const calIWcapErrors = Components.interfaces.calIWcapErrors;
  51. const calICalendar = Components.interfaces.calICalendar;
  52. const calIItemBase = Components.interfaces.calIItemBase;
  53. const calIOperationListener = Components.interfaces.calIOperationListener;
  54. const calIFreeBusyProvider = Components.interfaces.calIFreeBusyProvider;
  55. const calIFreeBusyInterval = Components.interfaces.calIFreeBusyInterval;
  56. const calICalendarSearchProvider = Components.interfaces.calICalendarSearchProvider;
  57. const calIErrors = Components.interfaces.calIErrors;
  58.  
  59. // ctors:
  60. var CalEvent;
  61. var CalTodo;
  62. var CalDateTime;
  63. var CalDuration;
  64. var CalPeriod;
  65. var Timer;
  66.  
  67. // some string resources:
  68. var g_privateItemTitle;
  69. var g_confidentialItemTitle;
  70. var g_busyItemTitle;
  71. var g_busyPhantomItemUuidPrefix;
  72.  
  73. // global preferences:
  74.  
  75. // caching the last data retrievals:
  76. var CACHE_LAST_RESULTS = 4;
  77. // timer secs for invalidation:
  78. var CACHE_LAST_RESULTS_INVALIDATE = 120;
  79.  
  80. // logging:
  81. var LOG_LEVEL = 0;
  82.  
  83. function initWcapProvider()
  84. {
  85.     try {
  86.         // xxx todo: hack
  87.         // the master password prompt is currently not guarded against
  88.         // multiple prompt; this initializes/raises the pw db at early stage.
  89.         var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"]
  90.                                         .getService(Components.interfaces.nsIPasswordManager);
  91.         var enumerator = passwordManager.enumerator;
  92.         if (enumerator.hasMoreElements())
  93.             enumerator.getNext(); // actually prompts...
  94.     }
  95.     catch (exc) {
  96.     }
  97.     
  98.     try {        
  99.         // ctors:
  100.         CalEvent = new Components.Constructor("@mozilla.org/calendar/event;1",
  101.                                               "calIEvent");
  102.         CalTodo = new Components.Constructor("@mozilla.org/calendar/todo;1",
  103.                                              "calITodo");
  104.         CalDateTime = new Components.Constructor("@mozilla.org/calendar/datetime;1",
  105.                                                  "calIDateTime");
  106.         CalDuration = new Components.Constructor("@mozilla.org/calendar/duration;1",
  107.                                                  "calIDuration");
  108.         CalPeriod = new Components.Constructor("@mozilla.org/calendar/period;1",
  109.                                                "calIPeriod");
  110.         Timer = new Components.Constructor("@mozilla.org/timer;1",
  111.                                            "nsITimer");
  112.         
  113.         initLogging();
  114.         
  115.         // some string resources:
  116.         g_privateItemTitle = calGetString("wcap", "privateItem.title.text");
  117.         g_confidentialItemTitle = calGetString("wcap", "confidentialItem.title.text");
  118.         g_busyItemTitle = calGetString("wcap", "busyItem.title.text");
  119.         g_busyPhantomItemUuidPrefix = ("PHANTOM_uuid_" + getUUID());
  120.  
  121.         CACHE_LAST_RESULTS = getPref("calendar.wcap.cache_last_results", 4);
  122.         CACHE_LAST_RESULTS_INVALIDATE = getPref("calendar.wcap.cache_last_results_invalidate", 120);
  123.     }
  124.     catch (exc) {
  125.         logError(exc, "error in init sequence");
  126.     }
  127. }
  128.  
  129. var calWcapCalendarFactory = { // nsIFactory:
  130.     lockFactory: function calWcapCalendarFactory_lockFactory(lock) {},
  131.     
  132.     createInstance: function calWcapCalendarFactory_createInstance(outer, iid) {
  133.         if (outer)
  134.             throw Components.results.NS_ERROR_NO_AGGREGATION;
  135.         return (new calWcapCalendar()).QueryInterface(iid);
  136.     }
  137. };
  138.  
  139. var calWcapCalendarModule = { // nsIModule:
  140.     
  141.     WcapCalendarInfo: {
  142.         classDescription: "Sun Java System Calendar Server WCAP Provider",
  143.         contractID: "@mozilla.org/calendar/calendar;1?type=wcap",
  144.         classID: Components.ID("{CF4D93E5-AF79-451a-95F3-109055B32EF0}")
  145.     },
  146.     
  147.     WcapSessionInfo: {
  148.         classDescription: "Sun Java System Calendar Server WCAP Session",
  149.         contractID: "@mozilla.org/calendar/wcap/session;1",
  150.         classID: Components.ID("{CBF803FD-4469-4999-AE39-367AF1C7B077}")
  151.     },
  152.     
  153.     registerSelf: function calWcapCalendarModule_registerSelf(compMgr, fileSpec, location, type)
  154.     {
  155.         compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
  156.         compMgr.registerFactoryLocation(this.WcapCalendarInfo.classID,
  157.                                         this.WcapCalendarInfo.classDescription,
  158.                                         this.WcapCalendarInfo.contractID,
  159.                                         fileSpec, location, type);
  160.         compMgr.registerFactoryLocation(this.WcapSessionInfo.classID,
  161.                                         this.WcapSessionInfo.classDescription,
  162.                                         this.WcapSessionInfo.contractID,
  163.                                         fileSpec, location, type);
  164.     },
  165.     
  166.     unregisterSelf: function calWcapCalendarModule_unregisterSelf(compMgr, fileSpec, location)
  167.     {
  168.         compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
  169.         compMgr.unregisterFactoryLocation(this.WcapCalendarInfo.classID, fileSpec);
  170.         compMgr.unregisterFactoryLocation(this.WcapSessionInfo.classID, fileSpec);
  171.     },
  172.     
  173.     m_scriptsLoaded: false,
  174.     getClassObject: function calWcapCalendarModule_getClassObject(compMgr, cid, iid)
  175.     {
  176.         if (!this.m_scriptsLoaded) {
  177.             // loading extra scripts from ../js:
  178.             const scripts = [ "calUtils.js", "calProviderBase.js",
  179.                               "calWcapUtils.js", "calWcapErrors.js",
  180.                               "calWcapRequest.js", "calWcapSession.js",
  181.                               "calWcapCalendar.js", "calWcapCalendarItems.js" ];
  182.             var scriptLoader =
  183.                 Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
  184.                           .createInstance(Components.interfaces.mozIJSSubScriptLoader);
  185.             var ioService = Components.classes["@mozilla.org/network/io-service;1"]
  186.                                       .getService(Components.interfaces.nsIIOService);
  187.             var baseDir = __LOCATION__.parent.parent;
  188.             baseDir.append("js");
  189.             for each (var script in scripts) {
  190.                 var scriptFile = baseDir.clone();
  191.                 scriptFile.append(script);
  192.                 scriptLoader.loadSubScript(ioService.newFileURI(scriptFile).spec, null);
  193.             }
  194.             initWcapProvider();
  195.             this.m_scriptsLoaded = true;
  196.         }
  197.         
  198.         if (!iid.equals(Components.interfaces.nsIFactory))
  199.             throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  200.         if (!cid.equals(calWcapCalendar.prototype.classID))
  201.             throw Components.results.NS_ERROR_NO_INTERFACE;
  202.         return calWcapCalendarFactory;
  203.     },
  204.     
  205.     canUnload: function calWcapCalendarModule_canUnload(compMgr) { return true; }
  206. };
  207.  
  208. /** module export */
  209. function NSGetModule(compMgr, fileSpec) {
  210.     return calWcapCalendarModule;
  211. }
  212.  
  213.